﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entity.Framework;
using System.Data.Objects;

namespace Business.Operations
{
    public class KullaniciOperation
    {
        /*Bizim yerimize database'e bağlanır, dataları çeker.
         * Her bir Kullanici row'unu alacak bunlardan kullanici instance'ı
         * oluşturacak, collection'a ekleyecek ve bize onu geri dönecek.
         */

        /*Metotları static yapmam gerekiyor. Her seferinde yeni bir instance oluşturmama
         * gerek yok. Yardımcı sınıf gibi düşünülür.
         */

        /* Bu class library(Business)'ye sürüm olarak uyumlu çalışması için 
         * EntityFramework dll'i reference ettim.
         */
        private static HPDMASEntities db = new HPDMASEntities();

        public KullaniciOperation()
        {

        }

        public static List<Kullanici> KullaniciGetAll()
        {
            var kullaniciListesi = db.Kullanici.ToList();
            return kullaniciListesi;
        }

        public static Kullanici KullaniciGetByKullaniciId_2(int kullaniciId)
        {
            var kullanici = (from c in db.Kullanici where c.KullaniciID == kullaniciId select c).First();
            return kullanici;

        }

        public static Kullanici KullaniciGetByKullaniciId(int kullaniciId)
        {
            var kullaniciColumn = (from c in db.Kullanici where c.KullaniciID == kullaniciId select c).First();
            return kullaniciColumn;
        }

        public static void KullaniciDelete(int kullaniciId)
        {
            //db.gsp_KullaniciDelete(kullaniciId);
            Kullanici k = (from c in db.Kullanici where c.KullaniciID == kullaniciId select c).First();
            db.DeleteObject(k);
            db.SaveChanges();
        }

        public static void KullaniciUpdate(Kullanici kullanici)
        {
            db.Kullanici.ApplyCurrentValues(kullanici);
            db.SaveChanges();
        }

        public static int KullaniciIdGetByKullaniciLisansNo(string lisansNo)
        {
            var kullaniciId = db.Kullanici.Where(c => c.KullaniciLisansNo == lisansNo).Select(c => c.KullaniciID).FirstOrDefault();
            return kullaniciId;
        }

        public static int KullaniciIdGetByKullaniciEposta(string kullaniciEposta)
        {
            var kullaniciId = db.KullaniciIletisim.
                Where(c => c.KullaniciEposta == kullaniciEposta).
                Select(c=>c.Kullanici.KullaniciID).FirstOrDefault();
            return kullaniciId;
        }

        public static string KullaniciLisansNoGetByKullaniciLisansNo(string kullaniciLisansNo)
        {
            return (from c in db.Kullanici where c.KullaniciLisansNo == kullaniciLisansNo select c.KullaniciLisansNo).SingleOrDefault();
        }

        public static void KullaniciInsert(Kullanici kullanici)
        {
            db.Kullanici.AddObject(kullanici);
            db.SaveChanges();
        }

        public static int KullaniciIdGetByKullaniciAdiSoyadi(string hakemAdi)
        {
            var kullaniciId = db.KullaniciNfs.
                Where(c => c.KullaniciNfsAdi + " " + c.KullaniciNfsSoyadi == hakemAdi).
                Select(c => c.KullaniciID).First();
            return (Int32)kullaniciId;
        }

        public static string KullaniciParolaGetByKullaniciId(int kullaniciId)
        {
            var parola = db.Kullanici.
                Where(c => c.KullaniciID == kullaniciId).
                Select(c => c.KullaniciParola).FirstOrDefault();
            return parola;
        }

        public static string RolAdiGetByKullaniciId(int kullaniciId)
        {
            var rolAdi = db.Kullanici.
                Where(c => c.KullaniciID == kullaniciId).
                Select(c => c.Rol.RolAdi).FirstOrDefault();
            return rolAdi;
        }

        public static string SehirAdiGetByKullaniciId(int kullaniciId)
        {
            var sehirAdi = db.Kullanici.
                Where(c => c.KullaniciID == kullaniciId).
                Select(c => c.Sehir.SehirAdi).First();
            return sehirAdi;
        }
    }
}
